//
//  ZHMMenuLabel.m
//  UIMenuController
//
//  Created by zhm on 17/9/28.
//  Copyright © 2017年 yibai. All rights reserved.
//

#import "ZHMMenuLabel.h"

@implementation ZHMMenuLabel


//xib创建label时使用
- (void)awakeFromNib{

    [self setUp];
}


//代码创建label时使用
- (instancetype)initWithFrame:(CGRect)frame{

    if (self == [super initWithFrame:frame]) {
        [self setUp];
    }
    return self;
}

//基础配置
- (void)setUp{

    self.userInteractionEnabled = YES;
    [self addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress)]];

}

//长按手势
- (void)longPress{

    NSLog(@"%s",__func__);
    
    //1.设置label为第一响应者
    //通过设置第一响应者，UIMenuController可以获得支持哪些操作的信息，操作怎么处理
    [self becomeFirstResponder];
    
    //2.设置UIMenuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    
    //自定义 UIMenuController
    UIMenuItem *item1 = [[UIMenuItem alloc] initWithTitle:@"剪切" action:@selector(myCut:)];
    UIMenuItem *item2 = [[UIMenuItem alloc] initWithTitle:@"粘贴" action:@selector(myPaste:)];
    menu.menuItems = @[item1,item2];
    
    NSLog(@"%d",menu.isMenuVisible);
    
    //当长按labe的时候，这个方法会不断调用，menu就会出现一闪一闪的不断提示，需要在此处进行判断
    if (menu.isMenuVisible) {
        return;
    }
    
    /*
     
     设置UIMenuController的显示相关信息
     
     @param targetRect menu需要显示的矩形框
     @param targetView targetRect会以targetView的左上角为坐标原点进行显示
     
     
     1.targetRect一旦设定以后，矩形范围不会随着view的移动而移动，如果view移动，必须更新相应的targetRect。比如tableView点击cell出现menu，当按住对应的cell。拖动tableView滚动时，menu不会随着对应的cell一起滚动
     2.targetRect通常设置为需要弹出menu控件bounds，targetView设置为对应控件的本身
     
     
     */
    
    //    - (void)setTargetRect:(CGRect)targetRect inView:(UIView *)targetView;
    
    [menu setTargetRect:self.bounds inView:self];
//    [menu setTargetRect:self.frame inView:self.superview];
    
    [menu setMenuVisible:YES];
    
}

#pragma mark - 对控件权限进行设置
//如果自定的menu显示效果存在问题，一般是这两个方法出了问题。需要多加琢磨
//设置label控件可以成为第一响应者，注意并不是所有的控件都可以成为第一响应者。default is NO
- (BOOL)canBecomeFirstResponder{

    return YES;
}
/*
 设置控件能够执行具体哪些操作
 @parma action 具体操作
 @return YES:支持该操作
 
 */
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    if (action == @selector(cut:) || action == @selector(copy:) || action == @selector(myCut:) || action == @selector(myPaste:)) {
        return YES;
    }else{
        return NO;
    }
}

/*  cut:
copy:
select:
selectAll:
paste:
delete:
_promptForReplace:
_transliterateChinese:
_showTextStyleOptions:
_define:
_addShortcut:
_accessibilitySpeak:
_accessibilitySpeakLanguageSelection:
_accessibilityPauseSpeaking:
_share:
makeTextWritingDirectionRightToLeft:
makeTextWritingDirectionLeftToRight:
*/

#pragma mark - 方法的实现

//剪切
- (void)myCut:(UIMenuController *)menu{

    NSLog(@"%s---%@",__func__,menu);
    
    //复制文字到剪贴板
    [self copy:menu];
    //清空文字
    self.text = nil;

}
- (void)cut:(UIMenuController *)menu{
    
    NSLog(@"%s---%@",__func__,menu);
    
    //复制文字到剪贴板
    [self copy:menu];
    //清空文字
    self.text = nil;
    
}
- (void)copy:(UIMenuController *)menu{
    
    //当没有文字的时候调用这个方法会崩溃
    if (!self.text) {
        return;
    }
    
    //复制文字到剪贴板
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    paste.string = self.text;
    
}
//粘贴
- (void)myPaste:(UIMenuController *)menu{
    
   //将剪贴板的文字赋值给label
    UIPasteboard *paste = [UIPasteboard generalPasteboard];
    self.text = paste.string;
    
}



@end
